package com.sheng.leetcode.year2025.month10.day14;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author by ls
 * @date 2025/10/14
 * <p>
 * 3349. 检测相邻递增子数组 I<p>
 * <p>
 * 给你一个由 n 个整数组成的数组 nums 和一个整数 k，请你确定是否存在 两个 相邻 且长度为 k 的 严格递增 子数组。具体来说，需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组，并满足下述全部条件：<p>
 * 这两个子数组 nums[a..a + k - 1] 和 nums[b..b + k - 1] 都是 严格递增 的。<p>
 * 这两个子数组必须是 相邻的，即 b = a + k。<p>
 * 如果可以找到这样的 两个 子数组，请返回 true；否则返回 false。<p>
 * 子数组 是数组中的一个连续 非空 的元素序列。<p>
 * <p>
 * 示例 1：<p>
 * 输入：nums = [2,5,7,8,9,2,3,4,3,1], k = 3<p>
 * 输出：true<p>
 * 解释：<p>
 * 从下标 2 开始的子数组为 [7, 8, 9]，它是严格递增的。<p>
 * 从下标 5 开始的子数组为 [2, 3, 4]，它也是严格递增的。<p>
 * 两个子数组是相邻的，因此结果为 true。<p>
 * <p>
 * 示例 2：<p>
 * 输入：nums = [1,2,3,4,4,4,4,5,6,7], k = 5<p>
 * 输出：false<p>
 * <p>
 * 提示：<p>
 * 2 <= nums.length <= 100<p>
 * 1 <= 2 * k <= nums.length<p>
 * -1000 <= nums[i] <= 1000<p>
 */
public class LeetCode3349 {

    @Test
    public void test() {
//        List<Integer> nums = new ArrayList<>(Arrays.asList(2, 5, 7, 8, 9, 2, 3, 4, 3, 1));
//        int k = 3;
        List<Integer> nums = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 4, 4, 4, 5, 6, 7));
        int k = 5;
        System.out.println(new Solution().hasIncreasingSubarrays(nums, k));
    }
}

class Solution {
    public boolean hasIncreasingSubarrays(List<Integer> nums, int k) {
        // 集合内是否存在两个长度为 k 的严格递增子数组，并且这两个子数组必须得是相邻的
        int n = nums.size();
        for (int i = 0; i <= n - 2 * k; i++) {
            boolean isValid = true;
            // 检查第一个子数组 [i, i + k - 1]
            for (int j = i + 1; j < i + k; j++) {
                if (nums.get(j) <= nums.get(j - 1)) {
                    isValid = false;
                    break;
                }
            }
            if (!isValid) {
                // 第一个子数组不满足条件，跳过
                continue;
            }

            // 检查第二个子数组 [i + k, i + 2k - 1]
            for (int j = i + k + 1; j < i + 2 * k; j++) {
                if (nums.get(j) <= nums.get(j - 1)) {
                    isValid = false;
                    break;
                }
            }
            if (isValid) {
                return true;
            }
        }
        return false;
    }
}
